package main

import "fmt"

//类似于java中的继承
//结构体的嵌套
//父类
//type Renlei struct {
//	name string
//	id   int
//	age  int
//}

type Tui struct {
	name string
	id   int
	age  int
}

//子类
type Xuedsheng struct {
	//匿名字段
	//匿名字段是只有类型，没有名字
	//Renlei
	*Tui
	name    string
	chengji int
}

func main() {
	//初始化匿名字段并赋值
	//s1 := Xuedsheng{Renlei{"小明", 1, 18}, "100",100}
	//fmt.Println(s1)
	//指定初始化成员
	//s2 := Xuedsheng{Renlei{name: "小明"}, 10}
	//fmt.Println(s2)
	//成员操作
	//s1.chengji = 90
	//s1.Renlei.name = "美女"
	//fmt.Println(s1)
	//s1.Renlei = Renlei{"笑笑", 2, 22}
	//fmt.Println(s1)
	//父类和子类都有同一个变量名时，优先使用子类的
	//	s1.name="ddd"
	//	fmt.Println(s1)
	//	s1.Renlei.name="小兔兔"
	//	fmt.Println(s1)
	//指针类型的匿名字段
	var s1 Xuedsheng
	fmt.Println(s1)
	s1.Tui = new(Tui)
	s1.Tui.name = "dddd"
	fmt.Println(s1.Tui.name)
	//或者
	s1.Tui = &Tui{"荷包蛋", 1, 100}
	fmt.Println(s1.age, s1.Tui.name)

}
